package com.cassioso.redeneural.memoria;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

/**
 * Classe que realiza a leitura dos ados em um arquivo para alimentar uma lista de formas
 * @author cassio
 */
public final class M {

	/**
	 * Recupera os dados em conhecimento.memoria e retorna uma lista com as formas
	 * preenchidas. Cada forma possui um nome, um conjunto de valores e um
	 * "gabarito" que é o resultado esperado.
	 * 
	 * Aqui consideramos que a forma segue a seguinte estrutura:
	 * 
	 * primeira linha: 					nome da forma
	 * 10 linhas subsequentes: 	10 valores por linha, que pode ser 1 ou 0 cada. Posteriormente é convertido para 1 e -1.
	 * 
	 * Se repete n vezes. Em nosso caso se repete 5 vezes.
	 */
	public static Forma[] lembrar() {
		/**
		 * Forma fc[], lista de formas a ser retorada, 5 formas apenas.
		 */
		Forma fc[] = new Forma[5];
		try {
			/**
			 * Índice da forma
			 */
			int fcIndex = 0;
			/**
			 * Arquivo de onde serão lidos os dados para preencher as formas
			 */
			File memoria = new File("resources"+File.separator+"conhecimento.memoria");
			/**
			 * Leitor do arquivo
			 */
			BufferedReader br = new BufferedReader(new FileReader(memoria));

			/**
			 * fazendo a leitura do arquivo até o seu fim.
			 */
			while (br.ready()) {
				/**
				 * Representa uma linha lida.
				 */
				String linha = br.readLine();
				// System.out.println(linha);
				/**
				 * Cria uma forma para ser preenchida
				 */
				fc[fcIndex] = new Forma();
				/**
				 * Entitula a forma
				 */
				fc[fcIndex].setNome(linha);
				/**
				 * Iteração que preenche os valores da forma
				 */
				for (int i = 0; i < 10; i++) {
					linha = br.readLine();
					// System.out.println(linha);
					fc[fcIndex].setValor(i, linha);
				}
				/**
				 * Incrementa para uma nova forma
				 */
				fcIndex++;
			}
			/**
			 * Encerra a sessão
			 */
			br.close();
		} catch (final Exception e) {
			e.printStackTrace();
		}
		/**
		 * Retorna a lista de formas já preenchida
		 */
		return fc;
	}

	public static void main(String[] args) {
		Forma fc[] = M.lembrar();

		for (int i = 0; i < fc.length; i++) {
			System.out.println(fc[i]);
		}

	}

}